"""
1.多态，指的是：多种状态，即完成某个行为时，使用不同的对象会得到不同的状态。

同样的行为（函数），传入不同的对象，得到不同的状态

2.用处：
- 继承关系
- 抽象类（接口）

3.抽象类：含有抽象方法的类称之为抽象类

4.抽象方法：方法体是空实现的（pass）称之为抽象方法

5.抽象类的作用：
- 定义规范
- 定义标准
- 定义接口
- 不做具体的实现



"""

print("======================== 继承关系中使用")
# 定义父类
class Animal:
    def speak(self):
        """
        父类用来确定有哪些方法
        具体的方法实现，由子类自行决定
        这种写法，就叫做抽象类（也可以称之为接口）
        :return:
        """
        pass


# 定义子类dog
class Dog(Animal):
    def speak(self):
        print("汪汪汪")


# 定义子类cat
class Cat(Animal):
    def speak(self):
        print("喵喵喵")


# 定义一个函数，接收Animal类型的参数
def animal_speak(animal: Animal):
    animal.speak()


# 创建对象
dog = Dog()
cat = Cat()

"""
调用函数

函数规定了要传入一个Animal类型的参数，但是却传入了Dog和Cat类型的对象，
结果就是函数根据传入的不同对象，得到了不同的状态。
这就是多态。
"""
animal_speak(dog)
animal_speak(cat)


print("======================== 抽象类中使用")
"""
抽象类就好比定义一个标准，
包含了一些抽象的方法，要求子类必须实现。
"""
class AC:
    def cool_wind(self):
        """制冷"""
        pass
    def hot_wind(self):
        """制热"""
        pass
    def swing_left_right(self):
        """左右摆风"""
        pass

# 美的空调实现
class meidi_AC(AC):
    def cool_wind(self):
        print("美的制冷")

    def hot_wind(self):
        print("美的制热")

    def swing_left_right(self):
        print("美的左右摆风")


# TCL空调的实现
class tcl_AC(AC):
    def cool_wind(self):
        print("TCL制冷")

    def hot_wind(self):
        print("TCL制热")

    def swing_left_right(self):
        print("TCL左右摆风")


# 定义一个函数，接收AC类型的参数
def ac_cool_wind(ac: AC):
    ac.cool_wind()


# 创建美的对象
ac_meidi = meidi_AC()
# 创建TCL对象
ac_tcl = tcl_AC()

# 调用函数
ac_meidi.cool_wind()
ac_meidi.hot_wind()
ac_meidi.swing_left_right()
print("------------------")
ac_tcl.hot_wind()
ac_tcl.cool_wind()
ac_tcl.swing_left_right()

